<?php
function PN_Plugins_Setting_Manager()
{
	global $database, $blogid, $defaultURL, $pluginURL, $blogURL, $pluginMenuURL, $adminSkinSetting,$service;
	requireComponent('Eolin.PHP.Core');
	requireComponent('Textcube.Function.misc');
	requireComponent('Textcube.Core.BackwardCompatibility');
	$backup=null;
	
	if(file_exists(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml.gz")){
		$backup = filemtime(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml.gz");
		$backupURL = $defaultURL."/cache/backup/{$blogid}_plugins_set_backup.xml.gz";
	}elseif(file_exists(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml")){
		$backup = filemtime(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml");
		$backupURL = $defaultURL."/cache/backup/{$blogid}_plugins_set_backup.xml";
	}

	?>
	<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $service['path'].$adminSkinSetting['skin'];?>/basic.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="<?php echo $service['path'].$adminSkinSetting['skin'];?>/setting.css" />
	<?php
	if(isset($checkFunction))
		unset($checkFunction);?>
		<script type="text/javascript">
			//<![CDATA[
				function checkForceTextcubeVersion() {
					if (confirm("<?php echo _t('텍스트큐브 시스템 점검이 필요합니다. 지금 점검하시겠습니까?');?>"))
						window.location.href = "<?php echo $blogURL;?>/checkup";
					else
						alert("<?php echo _t('점검 없이 이 기능을 사용할 수 없습니다.');?>");
				}
			//]]>
		</script>
	<?php
	if(!file_exists(ROOT.'/cache/CHECKUP')){?>
		<script type="text/javascript">
			//<![CDATA[
				window.addEventListener("load", checkTextcubeVersion, false);
				function checkTextcubeVersion() {
					if (confirm("<?php echo _t('버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?');?>"))
						window.location.href = "<?php echo $blogURL;?>/checkup";
				}
			//]]>
		</script>
	<?php
		$checkFunction='checkForceTextcubeVersion();';
	}elseif(file_get_contents(ROOT.'/cache/CHECKUP')!=TEXTCUBE_VERSION){?>
		<script type="text/javascript">
			//<![CDATA[
				window.addEventListener("load", checkTextcubeVersion, false);
				function checkTextcubeVersion() {
					if (confirm("<?php echo _t('텍스트큐브 시스템 점검이 필요합니다. 지금 점검하시겠습니까?');?>"))
						window.location.href = "<?php echo $blogURL;?>/checkup";
				}
			//]]>
		</script>
	<?php
		$checkFunction='checkForceTextcubeVersion();';
	}

	if(false) 
		forceCheckBlog('');?>
						<script type="text/javascript">
							//<![CDATA[
								var dialog = null;
								
								function showDialog($name) {
									if (dialog)
										dialog.style.display = "none";
									dialog = document.getElementById($name + "Dialog");
									PM.showPanel(dialog);
								}
								
								function hideDialog() {
									if (dialog) {
										dialog.style.display = "none";
										dialog = null;
									}
								}
								
								function backupData() {
									var request = new HTTPRequest("POST", "<?php echo $blogURL;?>/plugin/PluginServerBackup/");
									PM.addRequest(request, "<?php echo _t('백업을 저장하고 있습니다.');?>");
									request.onSuccess = function () {
										PM.removeRequest(this);
										PM.showMessage("<?php echo _t('백업이 저장되었습니다.');?>", "center", "bottom");
									}
									request.onError = function () {
										var dd = this.getText();
										PM.removeRequest(this);
										alert("<?php echo _t('백업을 저장하지 못했습니다.');?>");
									}
									request.send();
									hideDialog();
								}
								
								function exportData() {
									window.location.href = "<?php echo $blogURL;?>/plugin/PluginExportBackup/";
									hideDialog();
								}

								function downloadBackup() {
									window.location.href = "<?php echo $blogURL;?>/plugin/PluginDownloadBackup/";
									hideDialog();
								}								

								function importData() {
									if(confirm("<?php echo _t('일반적으로 복원시 기존의 데이터를 덮어씁니다. \n계속 하시겠습니까?');?>")!=1) return null;

									var dataImporter = document.getElementById("dataImporter");
									if (document.getElementById("importFromUploaded").checked) {
										if (!dataImporter.elements["backupPath"].value) {
											alert("<?php echo _t('백업파일을 선택하십시오.');?>");
											dataImporter.elements["backupPath"].focus();
											return false;
										}
										document.getElementById("progressText").innerHTML = "<?php echo _t('백업파일을 올리고 있습니다.');?>";
									} else if (document.getElementById("importFromWeb").checked) {
										if (!dataImporter.elements["backupURL"].value) {
											alert("<?php echo _t('백업파일 URL을 입력하십시오.');?>");
											dataImporter.elements["backupURL"].focus();
											return false;
										}
										document.getElementById("progressText").innerHTML = "<?php echo _t('백업파일을 가져오고 있습니다.');?>";
									} else {
										document.getElementById("progressText").innerHTML = "";
									}
									hideDialog();
									document.getElementById("progressIndicator").style.width = "0%";
									document.getElementById("progressDialogTitle").innerHTML = '<?php echo _t('플러그인 설정 데이터를 복원하고 있습니다. 잠시만 기다려 주십시오.');?>';
									document.getElementById("progressText").innerHTML = '<?php echo _t('백업파일을 올리고 있습니다.');?>';
									PM.showPanel("progressDialog");
									dataImporter.submit();
								}
								
								function removeData() {
									var confirmativePassword = document.getElementById("confirmativePassword");
									if (confirmativePassword.value.length < 6) {
										alert("<?php echo _t('비밀번호를 입력해 주십시오.');?>");
										confirmativePassword.focus();
										return false;
									}
									var request = new HTTPRequest("POST", "<?php echo $blogURL;?>/plugin/PluginRemove/");
									PM.addRequest(request, "<?php echo _t('플러그인 설정 데이터를 초기화하고 있습니다.');?>");
									request.onSuccess = function () {
										PM.removeRequest(this);
										PM.showMessage("<?php echo _t('플러그인 설정 데이터를 초기화 되었습니다.');?>", "center", "bottom");
										confirmativePassword.value = '';
									}
									request.onError = function () {
										PM.removeRequest(this);
										alert("<?php echo _t('비밀번호가 일치하지 않습니다.');?>");
									}
									request.send("confirmativePassword=" + encodeURIComponent(confirmativePassword.value));
									hideDialog();
								}
							//]]>
						</script>
						<div id="plugin-setting-manager">
							<h2 class="caption"><span class="main-text"><?php echo _t('플러그인 설정 데이터 복원 및 백업 관리를 합니다.');?></span></h2>
							<div class="pcaption">
								<?php echo _t('블로그에 등록된 플러그인의 설정사항을 복원 및 백업 할수 있습니다. 플러그인을 <b>\'사용중\'</b>으로 해놓은 것들만 백업 대상이 됩니다.<br /> 플러그인 각각의 설정값을 그대로 복원 및 백업 할수 있습니다. 텍스트큐브 v1.5 버전 이상에서만 사용할 수 있고, 복원하시려면 적어도 <b>\'플러그인 설정 관리\'</b> 플러그인은 <br />사용중으로 되어 있어야 합니다. 플러그인 설정 데이터 초기화 하시기 전에 반드시 백업 하시기 바랍니다.');?>
							</div>
							<div id="part-data-restore" class="part">
								<h2 class="caption"><span class="main-text"><?php echo _t('플러그인 설정 데이터를 복원합니다');?></span></h2>
								
								<div class="data-inbox main-explain-box">
									<div class="image" onclick="<?php echo forceCheckBlog("showDialog('DBImport');");?> return false">
										<img src="<?php echo $service['path'].$adminSkinSetting['skin'];?>/image/dbImport.png" alt="<?php echo _t('플러그인 설정 데이터 복원 이미지');?>" />
									</div>
									<p class="explain">
										<?php echo _t('백업파일을 읽어서 데이터를 복원합니다.<br />백업파일에 첨부파일이 포함되어 있으면 첨부파일도 자동으로 복원됩니다.');?>
									</p>
								</div>

								<div id="DBImportDialog" class="dialog" style="position: absolute; display: none; z-index: 100;">
									<form id="dataImporter" method="POST" action="<?php echo $blogURL;?>/plugin/PluginDataImport/" enctype="multipart/form-data" target="blackhole">
										<input type="hidden" name="tempowner" value="<?php echo $blogid;?>" />
										<h3><?php echo _t('플러그인 설정데이터 복원을 시작합니다');?></h3>
										
										<div class="message-body">
											<div class="explain">
												<?php echo _f('이 계정의 업로드 허용 용량은 <em>%1</em> 바이트로 백업파일의 크기가 이를 초과하는 경우 <acronym title="File Transfer Protocol">FTP</acronym> 등으로 원하시는 사이트에 업로드하신 후 이 파일의 웹 주소를 입력해서 진행하십시오. 이 경우, 보안을 위해 복원이 끝나면 반드시 그 백업파일을 웹 상에서 지우실 것을 권장합니다.',(getNumericValuePlugin(ini_get('post_max_size'))<getNumericValuePlugin(ini_get('upload_max_filesize'))?ini_get('post_max_size'):ini_get('upload_max_filesize')));?>
											</div>
	<?php
	if($backup){?>
											<p class="message">
												<?php echo _f('서버에 <font color="blue"><em>%1</em></font>에 저장된 플러그인 설정 백업파일이 있습니다.',Timestamp::format5($backup));?><br />
												<?php echo _t('(서버에 저장된 백업파일 <a href="#" onclick="downloadBackup();"><font color="#C56D54">다운로드 받기</font></a>)');?>
											</p>
	<?php
	}?>
											<div class="selection">
	<?php
	if($backup){?>
												<div id="select-server" title="<?php echo _t('플러그인 설정 데이터 백업 기능을 통해 서버에 저장해 두었던 기존 파일을 이용해 데이터베이스를 복원합니다. 데이터 파일에 대해서는 위의 정보를 참고하십시오.');?>"><input type="radio" id="importFromServer" class="radio" name="importFrom" value="server" checked="checked" onclick="if (this.checked) {hideLayer('uploadBackup'); hideLayer('remoteBackup'); document.getElementById('backupPath').disabled = true; document.getElementById('backupURL').disabled = true;}" /><label for="importFromServer"><?php echo _t('서버에 저장된 백업파일.');?></label></div>
	<?php
	}?>
												<div id="select-upload" title="<?php echo _t('백업파일을 자신의 하드디스크로부터 직접 선택하여 데이터베이스를 복원합니다. 백업파일의 용량이 업로드 허용용량을 초과하지 않는지 주의하십시오.');?>"><input type="radio" id="importFromUploaded" class="radio" name="importFrom" value="uploaded"<?php echo ($backup?'':' checked="checked"');?> onclick="if (this.checked) {showLayer('uploadBackup'); hideLayer('remoteBackup'); document.getElementById('backupPath').disabled = false; document.getElementById('backupURL').disabled = true;}" /><label for="importFromUploaded"><?php echo _t('백업파일 올리기.');?></label></div>
												<div id="select-web" title="<?php echo _t('백업파일의 크기가 업로드 허용 용량을 초과하는 경우, FTP 등을 이용하여 계정의 홈페이지에 직접 업로드한 후 이 파일의 위치를 지정하여 데이터베이스를 복원할 수 있습니다.');?>"><input type="radio" id="importFromWeb" class="radio" name="importFrom" value="web" onclick="if (this.checked) {hideLayer('uploadBackup'); showLayer('remoteBackup'); document.getElementById('backupPath').disabled = true; document.getElementById('backupURL').disabled = false;}" /><label for="importFromWeb"><?php echo _t('웹에서 백업파일 가져오기.');?></label></div>
												<div id="select-correct" title="<?php echo _t('백업파일에 비정상적인 글자가 포함된 경우 복원에 실패할 수 있습니다. 비정상적인 글자를 교정하여 복원이 가능하도록 합니다. 이를 사용할 경우 복원에 많은 시간이 소요될 수 있습니다.');?>"><input type="checkbox" id="correctData" class="checkbox" name="correctData" value="on" /><label for="correctData"><?php echo _t('백업파일에 포함된 비정상적인 글자를 교정합니다.');?></label></div>
											</div>
											<div id="uploadBackup" style="display: <?php echo ($backup?'none':'block');?>;">
												<label for="backupPath"><?php echo _t('백업파일 경로');?></label><span class="divider"> : </span><input type="file" id="backupPath" class="input-file" name="backupPath" <?php echo ($backup?'disabled="disabled"':'');?> />
											</div>
											<div id="remoteBackup" style="display: none;">
												<label for="backupURL"><?php echo _t('백업파일 <acronym title="Uniform Resource Locator">URL</acronym>');?></label><span class="divider"> : </span><input type="text" id="backupURL" class="input-text" name="backupURL" value="http://" disabled="disabled" onkeydown="if (event.keyCode == 13) { importData(); return false; }" />
											</div>
										</div>
										<div class="button-box">
											<a class="restore-button button" href="#void" onclick="importData()"><span class="text"><?php echo _t('복원하기');?></span></a>
											<span class="hidden">|</span>
											<a class="close-button button" href="#void" onclick="hideDialog()" title="<?php echo _t('명령을 취소하고 이 대화상자를 닫습니다.');?>"><span class="text"><?php echo _t('취소하기');?></span></a>
										</div>
									</form>
								</div>
								
								<div id="progressDialog" class="system-dialog" style="position: absolute; display: none; z-index: 100;">
									<h3 id="progressDialogTitle"></h3>
									<div class="message-sub">
										<p id="progressText"></p>
										<p id="progressTextSub"></p>
									</div>
									<div id="progressIndicator" class="progressBar" style="width: 10%; height: 18px; margin-top: 5px; background-color:#66DDFF;"></div>
								</div>
							</div>
							
							<hr class="hidden" />

							<div id="part-data-backup" class="part">
								<h2 class="caption"><span class="main-text"><?php echo _t('플러그인 설정 데이터를 백업합니다');?></span></h2>
								
								<div class="data-inbox main-explain-box">
									<div class="image" onclick="showDialog('DBExport')">
										<img src="<?php echo $service['path'].$adminSkinSetting['skin'];?>/image/dbExport.png" alt="<?php echo _t('플러그인 설정 데이터 백업 이미지');?>" />
									</div>
									<p class="explain">
										<?php echo _t('현재의 플러그인 설정 데이터를 백업파일로 보관합니다.<br />첨부파일을 포함시킬 수 있으며, 복원할 경우 자동으로 첨부파일이 처리됩니다.<br />백업파일은 서버에 저장하거나 다운받으실 수 있습니다.');?>
									</p>
								</div>
								
								<form id="DBExportDialog" class="dialog" method="get" action="<?php echo $blogURL;?>/plugin/PluginServerBackup/" style="position: absolute; display: none; z-index: 100;">
									<h3><?php echo _t('플러그인 설정 데이터 백업을 시작합니다');?></h3>
									
									<div class="message-body">
										<p class="message">
											<span><?php echo _t('서버 저장 또는 다운로드를 선택하여 백업하세요.');?></span><br>
											<span><?php echo _f('(서버 저장은 <b>\'%1/cache/backup/%2_plugins_set_backup.xml\'</b> 경로에 저장 됩니다.)', $service['path'], $blogid);?></span>
										</p>
									</div>
									<div class="button-box">
										<a class="server-button button" href="#void" onclick="backupData()" title="<?php echo _t('서버에 백업파일을 저장하여 복원에 사용할 수 있습니다.');?>"><span class="text"><?php echo _t('서버에 저장');?></span></a>
										<span class="hidden">|</span>
										<a class="local-button button" href="#void" onclick="exportData()" title="<?php echo _t('현재 상태의 데이터를 백업하여 다운로드합니다. 서버에 저장된 백업파일은 갱신되지 않습니다.');?>"><span class="text"><?php echo _t('다운로드');?></span></a>
										<span class="hidden">|</span>
										<a class="close-button button" href="#void" onclick="hideDialog()" title="<?php echo _t('명령을 취소하고 이 대화상자를 닫습니다.');?>"><span class="text"><?php echo _t('취소하기');?></span></a>
									</div>
								</form>
							</div>						

							<hr class="hidden" />
							
							<div id="part-data-remove" class="part">
								<h2 class="caption"><span class="main-text"><?php echo _t('플러그인 설정 데이터를 초기화 합니다');?></span></h2>
								
								<div class="data-inbox main-explain-box">
									<div class="image" onclick="showDialog('DBRemove')">
										<img src="<?php echo $service['path'].$adminSkinSetting['skin'];?>/image/dbClear.png" alt="<?php echo _t('데이터 삭제 이미지');?>" />
									</div>
									<p class="explain">
										<?php echo _t('플러그인 설정 데이터를 모두 초기화 합니다. 사용중인 모든 플러그인을 미사용으로 초기화 한다는 의미입니다.<br />플러그인 설정 데이터의 복원은 백업파일로만 가능하므로 먼저 백업을 하시기 바랍니다.');?>
									</p>
								</div>
								
								<form id="DBRemoveDialog" class="dialog" method="get" action="<?php echo $pluginURL;?>/remove" style="position: absolute; display: none; z-index: 100;">
									<h3><?php echo _t('플러그인 설정 데이터 초기화를 시작합니다');?></h3>
									
									<div class="message-body">
	<?php
	if($backup){?>
										<p class="explain" style="text-align:center;">
											<?php echo _f('서버에 <em>%1</em>에 저장된 백업파일이 있습니다. 초기화후 복원은 이 파일을 이용하실 수 있습니다.',Timestamp::format5($backup));?><br />
												<?php echo _t('(서버에 저장된 백업파일 <a href="#" onclick="downloadBackup();"><font color="#C56D54">다운로드 받기</font></a>)');?>
										</p><br />
	<?php
	}?>

										<div id="admin-password">
											<label for="confirmativePassword"><?php echo _t('데이터를 초기화하시려면 관리자 비밀번호를 입력하십시오.');?></label>
											<input type="password" id="confirmativePassword" class="input-text" name="confirmativePassword" onkeydown="if (event.keyCode == 13) { removeData(); return false; }" />
										</div>
									</div>
									<div class="button-box">
										<a class="remove-button button" href="#void" onclick="removeData()"><span class="text"><?php echo _t('초기화하기');?></span></a>
										<span class="hidden">|</span>
										<a class="close-button button" href="#void" onclick="hideDialog()" title="<?php echo _t('명령을 취소하고 이 대화상자를 닫습니다.');?>"><span class="text"><?php echo _t('취소하기');?></span></a>
									</div>
								</form>
							</div>

							<iframe id="blackhole" name="blackhole" style="display: none;"></iframe>
						</div>
	<?php
}

function forceCheckBlog($passFunction){
	global $checkFunction;
	if(!isset($checkFunction))
		return $passFunction;
	return $checkFunction;
}

function getRespondResultPage($error){
	if($error===true)
		$error=0;
	elseif($error===false)
		$error=1;
	print ("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<response>\n<error>$error</error>\n</response>");
	exit;
}

function getPluginServerBackup(){
	global $blogid;
	if(!empty($_SESSION['userid']) || ($_SESSION['userid'] == getUserId())){
		header('Content-Type: text/xml; charset=UTF-8');
		requireComponent('Eolin.PHP.OutputWriter');
		requireComponent('Textcube.Data.PluginSetting');

		set_time_limit(0);
		$writer=new OutputWriter();
		{
			if(!file_exists(ROOT.'/cache/backup')){
				mkdir(ROOT.'/cache/backup');
				@chmod(ROOT.'/cache/backup',0777);
			}
			if(!is_dir(ROOT.'/cache/backup')){
				exit;
			}
			if($writer->openFile(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml")){
			}else{
				exit;
			}
		}

		$writer->write('<?xml version="1.0" encoding="utf-8" ?>'.CRLF);
		$writer->write('<blog type="textcube/1.5" migrational="false">'.CRLF);

		$setting=new PluginSetting();
		if($setting->open()){
			do{
				$writer->write('	<plugin>'.'<name>'.$setting->name.'</name>'.'<setting>'.htmlspecialchars($setting->setting).'</setting>'.'</plugin>');
				$writer->write(CRLF);
			}while($setting->shift());
			$setting->close();
		}
		$writer->write('</blog>');
		$writer->close();
		{
			@chmod(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml",0666);
			getRespondResultPage(0);
		}
	}
}

function getPluginRemove(){
	global $blogid, $database;
	if(!empty($_SESSION['userid']) || ($_SESSION['userid'] == getUserId())){
		header('Content-Type: text/xml; charset=utf-8');
		requireComponent('Textcube.Core');
		requireComponent('Textcube.Data.DataMaintenance');
		if(empty($_POST['confirmativePassword'])||!User::confirmPassword($_POST['confirmativePassword']))
			getRespondResultPage(1);
		mysql_query("DELETE FROM {$database['prefix']}Plugins WHERE blogid = $blogid");
		getRespondResultPage(0);
	}
}
function getPluginExportBackup(){
	global $blogid;
	$blogName = getBlogSetting("name");
	requireComponent('Eolin.PHP.OutputWriter');
	requireComponent('Textcube.Data.PluginSetting');
	if(!empty($_SESSION['userid']) || ($_SESSION['userid'] == getUserId())){
		set_time_limit(0);
		$writer=new OutputWriter();
		{
			if($writer->openStdout()){
				header('Content-Disposition: attachment; filename="Textcube-'.$blogName.'-Plugins-Setting-Backup-'.Timestamp::getDate().'.xml"');
				header('Content-Description: Textcube Backup Data');
				header('Content-Transfer-Encoding: binary');
				header('Content-Type: application/xml');
			}else{
				exit;
			}
		}

		$writer->write('<?xml version="1.0" encoding="utf-8" ?>'.CRLF);
		$writer->write('<blog type="textcube/1.5" migrational="false">'.CRLF);

		$setting=new PluginSetting();
		if($setting->open()){
			do{
				$writer->write('	<plugin>'.'<name>'.$setting->name.'</name>'.'<setting>'.htmlspecialchars($setting->setting).'</setting>'.'</plugin>');
				$writer->write(CRLF);
			}while($setting->shift());
			$setting->close();
		}

		$writer->write('</blog>');
		$writer->close();
	}
}

function getPluginDownloadBackup(){
	global $blogid;
	$blogName = getBlogSetting("name");
	if(!empty($_SESSION['userid']) || ($_SESSION['userid'] == getUserId())){
		if(file_exists(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml")){
			header('Content-Disposition: attachment; filename="Textcube-'.$blogName.'-Plugins-Setting-Backup-'.Timestamp::getDate(filemtime(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml")).'.xml"');
			header('Content-Description: Textcube Backup Data');
			header('Content-Transfer-Encoding: binary');
			header('Content-Type: application/xml');
			readfile(ROOT."/cache/backup/{$blogid}_plugins_set_backup.xml");
		}else{
			respondNotFoundPage();
		}
	}
}

function getNumericValuePlugin($value){
	$value=trim($value);
	switch(strtoupper($value{strlen($value)-1})){
		case 'G':
			$value*=1024;
		case 'M':
			$value*=1024;
		case 'K':
			$value*=1024;
	}
	return $value;
}

function getPluginImportData(){
	global $database, $blogid, $blogURL, $items, $item, $migrational;

	requireComponent('Needlworks.Cache.PageCache');
	requireComponent('Eolin.PHP.OutputWriter');
	requireComponent('Eolin.PHP.Base64Stream');
	requireComponent('Textcube.Data.DataMaintenance');
	include_once 'import/Textcube.Data.PluginSetting.php';
	?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
	<head>
		<title>Textcube Data Importing</title>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<script type="text/javascript">
			//<![CDATA[
				var pi = window.parent.document.getElementById("progressIndicator");
				var pt = window.parent.document.getElementById("progressText");
				var pts = window.parent.document.getElementById("progressTextSub");
			//]]>
		</script>
	</head>
	<body>
	<?php
	$lastProgress = 0;
	$lastProgressText = null;
	$lastProgressTextSub = null;

	switch (@$_POST['importFrom']) {
		default:
			finish(_t('잘못된 요청입니다.'));
			break;
		case 'server':
			$backup = ROOT . "/cache/backup/{$blogid}_plugins_set_backup.xml";
			break;
		case 'uploaded':
			if (@$_FILES['backupPath']['error'] !== 0)
				finish(_t('업로드가 취소되었거나 업로드 용량 제한을 초과하였습니다.'));
			$backup = $_FILES['backupPath']['tmp_name'];
			break;
		case 'web':
			if (!file_exists(ROOT . '/cache/import')) {
				mkdir(ROOT . '/cache/import');
				@chmod(ROOT . '/cache/import', 0777);
			}
			if (!is_dir(ROOT . '/cache/import')) {
				finish(_t('백업파일을 저장할 공간에 권한이 없습니다.'));
			}
			requireComponent('Eolin.PHP.HTTPRequest');
			$request = new HTTPRequest($_POST['backupURL']);
			$backup = ROOT . "/cache/import/{$blogid}_plugins_set_backup.xml";
			$request->pathToSave = $backup;
			if (!$request->send()) {
				finish(_t('백업파일이 손상되었거나 가져올 수 없습니다.'));
			}
			break;
	}


	$xmls = new XMLStruct();
	set_time_limit(0);
	setProgress(0, _t('백업파일을 확인하고 있습니다.'));

	$xmls->setConsumer('scanner');
	if (!$xmls->openFile($backup, Validator::getBool(@$_POST['correctData']))) {
		finish(_f('백업파일의 %1번째 줄이 올바르지 않습니다.', $xmls->error['line']));
	}
	$xmls->close();
	if ($items == 0)
		finish(_t('백업파일에 복원할 데이터가 없습니다.'));
	if (!$migrational) {
		setProgress(0, _t('복원 위치를 준비하고 있습니다.'));
		mysql_query("DELETE FROM {$database['prefix']}Plugins WHERE blogid = $blogid");
		CacheControl::flushAll();
	}
	$xmls->setConsumer('importer');
	if (!$xmls->openFile($backup, Validator::getBool(@$_POST['correctData']))) {
		finish(_t('백업파일이 올바르지 않습니다.'));
	}

	$xmls->close();
	if( file_exists(ROOT . "/cache/import/{$blogid}_plugins_set_backup.xml"))
		@unlink(ROOT . "/cache/import/{$blogid}_plugins_set_backup.xml");
	setProgress(100, _t('완료되었습니다.'));
	finish();

	/// Optimizer Directives!
	if (false) {
		scanner();
		importer();
	}
}

function finish($error = null) {
	global $migrational;
	?>
		<script type="text/javascript">
			//<![CDATA[
	<?php
		if ($error) {
	?>
				//pi.style.backgroundColor = "red";
				alert("<?php echo $error;?>");
	<?php
		} else {
	?>
				alert("<?php echo ($migrational ? _t('성공적으로 이주되었습니다.') : _t('성공적으로 복원되었습니다.'));?>");
	<?php
		}
	?>
				window.parent.document.getElementById("progressDialog").style.display = "none";
				window.parent.document.getElementById("progressDialogTitle").innerHTML = "";
				window.parent.document.getElementById("progressText").innerHTML = "";
				window.parent.document.getElementById("progressTextSub").innerHTML = "";
			//]]>
		</script>
		<?php echo _t('완료.');?>
	</body>
	</html>
	<?php
	exit;
}

function setProgress($progress, $text = null, $sub = null) {
	global $lastProgress, $lastProgressText, $lastProgressTextSub;
	$progress = intval($progress);
	$diff = '';
	if (isset($progress) && ($progress != $lastProgress)) {
		$lastProgress = $progress;
		$diff .= 'pi.style.width = "' . $progress . '%";';
	}
	if (isset($text) && ($text != $lastProgressText)) {
		$lastProgressText = $text;
		$diff .= 'pt.innerHTML = "' . $text . '";';
		if (!isset($sub)) {
			$lastProgressTextSub = '';
			$diff .= 'pts.innerHTML = "";';
		}
	}
	if (isset($sub) && ($sub != $lastProgressTextSub)) {
		$lastProgressTextSub = $sub;
		$diff .= 'pts.innerHTML = "(' . $sub . ')";';
	}
	if (!empty($diff)) {
	?>
	<script type="text/javascript">
		//<![CDATA[
			<?php echo $diff;?>
		//]]>
	</script>
	<?php
		flush();
	}
}

/*@callback@*/
function scanner($path, $node, $line) {
	global $migrational, $items;
	switch ($path) {
		case '/blog':
			if (!preg_match('/^tattertools\/1\.[01]$/', @$node['.attributes']['type'])
			 && !preg_match('/^textcube\/1\.[0-9]$/', @$node['.attributes']['type']))
				finish(_t('지원하지 않는 백업파일입니다.'));
			$migrational = Validator::getBool(@$node['.attributes']['migrational']);
			return true;
		case '/blog/plugin':
			$items++;
			if (!strpos($path, 'referer'))
				setProgress(null, _t('백업파일을 확인하고 있습니다.'), $line);
			return true;
	}
}

/*@callback@*/
function importer($path, $node, $line) {
	global $blogid, $migrational, $items, $item;
	switch($path){
		case '/blog/plugin':
			setProgress($item++/$items*100,_t('플러그인 설정을 복원하고 있습니다.'));
			$setting = new PluginSetting();
			$setting->name = $node['name'][0]['.value'];
			$setting->setting = $node['setting'][0]['.value'];
			if(!$setting->add())
				user_error(__LINE__.$setting->error);
			return true;
	}
}

?>